﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using VIA.Integration;

//namespace VIA.SiMoJi.Domain.SoftPLC
//{
//    public interface ILadderDiagramNode
//    {
//        /// <summary>
//        /// 判断是否继续
//        /// </summary>
//        /// <returns></returns>
//        public bool GetContinuous();
//    }

//    /// <summary>
//    /// 常开
//    /// </summary>
//    public class NormalOpen : ILadderDiagramNode
//    {
//        public IBitDataRegister BitDataRegister { get; set; }

//        public NormalOpen() { }
//        public NormalOpen(IBitDataRegister bitDataRegister) { BitDataRegister = bitDataRegister; }

//        public bool GetContinuous()
//        {
//            return BitDataRegister?.GetBitData() >= 1;
//        }
//    }

//    /// <summary>
//    /// 常闭
//    /// </summary>
//    public class NormalClose : ILadderDiagramNode
//    {
//        public IBitDataRegister BitDataRegister { get; set; }

//        public NormalClose() { }
//        public NormalClose(IBitDataRegister bitDataRegister) { BitDataRegister = bitDataRegister; }

//        public bool GetContinuous()
//        {
//            return BitDataRegister?.GetBitData() == 0;
//        }
//    }

//    /// <summary>
//    /// 并行块
//    /// </summary>
//    public class ParallelBlock : ILadderDiagramNode
//    {
//        public List<ILadderDiagramNode> LadderDiagramNodes { get; set; } = new();
//        public bool GetContinuous()
//        {
//            bool isContinue = true;
//            foreach (var item in LadderDiagramNodes)
//            {
//                isContinue = item.GetContinuous();
//                if (isContinue) break;
//            }
//            return isContinue;
//        }

//        public void AddNodes(ILadderDiagramNode node)
//        {
//            LadderDiagramNodes.Add(node);
//        }
//    }

//    /// <summary>
//    /// 串行块
//    /// </summary>
//    public class SerialBlock : ILadderDiagramNode
//    {
//        public List<ILadderDiagramNode> LadderDiagramNodes { get; set; } = new();
//        public bool GetContinuous()
//        {
//            bool isContinue = true;
//            foreach (var item in LadderDiagramNodes)
//            {
//                isContinue &= item.GetContinuous();
//                if (!isContinue) break;
//            }
//            return isContinue;
//        }

//        public void AddNodes(ILadderDiagramNode node)
//        {
//            LadderDiagramNodes.Add(node);
//        }
//    }

//    /// <summary>
//    /// 分支开始标志
//    /// </summary>
//    public class ParallelStartFlag : ILadderDiagramNode
//    {
//        public static ParallelStartFlag StartFlag = new ParallelStartFlag(-1);
//        public int Flag { get; set; }
//        private ParallelStartFlag() { }
//        public ParallelStartFlag(int flag) => Flag = flag;
//        public bool GetContinuous()
//        {
//            return true;
//        }
//    }

//    /// <summary>
//    /// 分支结束标志
//    /// </summary>
//    public class ParallelEndFlag : ILadderDiagramNode
//    {
//        public static ParallelStartFlag StartFlag = new ParallelStartFlag(-1);
//        public int Flag { get; set; }
//        private ParallelEndFlag() { }
//        public ParallelEndFlag(int flag) => Flag = flag;
//        public bool GetContinuous()
//        {
//            return true;
//        }
//    }
//}
